/*
 * 此类主要负责列表的展示
 * @author zhouyh 
 * edit by jimes.liao, 增加前台分页模式处理
 */
common.gridHelper = function() {
	// private
	function populateReader(config) {
		var reader;
		if (config['transactionGrid'])// 对交易分页做处理
			reader = new Ext.data.JsonReader( {
				root : 'fundList',
				fields : config['mapping']
			});
		else if (config['noPaging'])// 不显示分页
			reader = new Ext.data.JsonReader( {
				fields : config['mapping']
			});
		else
			// 标准分页
			reader = new Ext.data.JsonReader( {
				root : 'data',
				totalProperty : 'totalCount',
				fields : config['mapping']
			});
		return reader;
	}
	// private
	function populateProxy(config) {

		return new Ext.data.HttpProxy( {
			url : common.AJAX_ACTION,
			timeout : common.TIME_OUT
		});
	}
	// private,前台分页模式
	function populateMemoryDataStore(config) {
		return new Ext.data.Store( {
			proxy : new Ext.data.PagingMemoryProxy(config.data),
			reader : populateReader(config)

		});
	}
	//

	// private
	function populateDataStore(config) {
		// 前台分页模式处理,jimes.liao 20100120
		if (!config['noPaging'] && config['storeMode'] === 'remoteMemory') {
			return populateMemoryDataStore(config);
		}
		return new Ext.data.Store( {
			baseParams : {
				strServId : config['strServId'],
				jsonData : config['jsonData']
			},
			proxy : populateProxy(config),
			reader : populateReader(config),
			listeners : {
				'loadexception' : function(scope, opt, rep) {
					if (!rep.getResponseHeader)
						php.showErrorMessage("业务逻辑异常", "请求超时,请稍后再试");
					else if (rep.getResponseHeader['C-Result-Status']
							&& rep.getResponseHeader['C-Result-Status'] == 603)
						php.showErrorMessage("业务逻辑异常", rep.responseText);
					else if (rep.getResponseHeader['C-Result-Status']
							&& rep.getResponseHeader['C-Result-Status'] == 602)
						php.showErrorWin("系统异常", rep.responseText);
				}
			}
		});
	}
	// private
	function populatePagingBar(config, ds) {
		if (!config['noPaging']) {
			return new Ext.PagingToolbar( {
				pageSize : common.PAGE_SIZE,
				store : ds,
				displayInfo : true,
				displayMsg : '显示记录 {0} - {1} of {2}',
				emptyMsg : "没有查询到记录",
				paramNames : {
					start : 'startIndex',
					limit : 'pageSize'
				}
			});
		}
		return null;
	}
	// private
	function populateColumns(config, sm) {
		var plugInColumns = [];

		if (config['expander']) {
			var expander = config['expander'];
			config['expanderPlugin'] = expander;
			plugInColumns.push(expander);
		}
		if (sm) {
			plugInColumns.push(sm);
		}

		return plugInColumns.concat(config['columnModel']);
	}
	// private
	function addtionalFunctionForDataStore(ds, grid) {
		ds.load( {
			params : {
				startIndex : 0,
				pageSize : 10
			}
		});
		var flag = true;
		ds.on('load', function(store, records) {
			grid.view.scroller.dom.style.overflow = 'auto'; // restore the
				// overflow to
				// 'auto'.
				if (records.length && flag
						&& grid.view.scroller.getSize().height != 0) {
					grid.view.scroller.setSize( {
						height : grid.view.scroller.getSize().height + 20
					})
					flag = false
				}
			})
	}
	return {
		/*
		 * config包括: mapping:后台传递过来的bean的属性与前台列表每列对应的名称(必填) strServId:后台handler
		 * id(必填) jsonData:传递给后台的参数(选填) inDataClass:vo(选填)
		 * errorTitle:错误框title(选填) showCheckBox:是否显示checkbox(boolean,选填),默认不显式
		 * gridPanelDiv:渲染的div id(必填)
		 * columnModel:列表每列的中文名称,dataIndex,以及一些可选项(比如可排列等)
		 * tbar:显式在列表上方的toolbar(包括按钮等) noPaging:如果为true则表示不显示分页栏,默认为false
		 * transactionGrid:交易分页,无法得到总数 expander:grid支持的插件对象，需要plugins支持的
		 * collapsible:列表可否折叠 forceFit:列是否自动平分 storeMode:数据加载/请求方式,默认为后台分页加载,
		 * remoteMemory:后台全量加载 使用举例: var config = {
		 * inDataClass:"com.easy.eclmp.beans.example.SearchConditionInDataBean",
		 * strServId:"hello.searchCustomer",
		 * jsonData:eclmp.Helper.getDataFromArea('customerInfoDetail'),
		 * mapping:['name','idNo','tel'], columnModel:[ new
		 * Ext.grid.RowNumberer(), {id:'personName',header: "姓名", sortable: true
		 * ,dataIndex: 'name'}, {header: "身份证号", sortable: true, dataIndex:
		 * 'idNo'}, {header: "电话号码", sortable: true,dataIndex: 'tel'} ],
		 * gridPanelDiv:'customerList', tbar:new Ext.Toolbar({
		 * items:[{xtype:"tbfill"}, { xtype:'button', id:'customerInfoDetail',
		 * text:"详细信息 " //handler:function(){dosth}
		 * 你可以添加自定义事件,所选列可以用grid.getSelectionModel().getSelections()得到(集合) },
		 * '-' ] }) };
		 */
		populatePagingGridPanel : function(config) {
			alert("wr");
			var ds = populateDataStore(config);
			var sm = null;
			var height = null;
			if (config['showCheckBox'])
				sm = new common.CheckboxSelectionModel();
			var columns = populateColumns(config, sm)
			var title = null;
			var collapsible = true;
			var forceFit = true;
			if (!Ext.isEmpty(config['forceFit']))
				forceFit = config['forceFit'];
			if (!Ext.isEmpty(config['collapsible']))
				collapsible = config['collapsible'];

			if (Ext.isEmpty(config['noTitle']))
				title = config['title'] || '查询结果';
			if (config['height'])
				var grid = new common.GridPanel( {
					collapsible : collapsible,
					autoScroll : true,
					sm : sm,
					loadMask : {
						msg : '数据加载中,请稍候.....'
					},
					store : ds,
					viewConfig : {
						forceFit : forceFit
					},
					columns : columns,
					bodyStyle : 'width:100%',
					height : config['height'],
					autoWidth : true,
					plugins : config['expanderPlugin'] || '',
					bbar : populatePagingBar(config, ds),
					id : config['id'],
					title : title,
					tbar : config['tbar']
				});
			else
				var grid = new common.GridPanel( {
					collapsible : collapsible,
					autoScroll : true,
					sm : sm,
					loadMask : {
						msg : '数据加载中,请稍候.....'
					},
					store : ds,
					viewConfig : {
						forceFit : forceFit
					},
					columns : columns,
					bodyStyle : 'width:100%',
					autoHeight : true,
					autoWidth : true,
					plugins : config['expanderPlugin'] || '',
					bbar : populatePagingBar(config, ds),
					id : config['id'],
					title : title,
					tbar : config['tbar']
				});

			if (config['width']) {
				grid.setWidth(config['width']);
			}

			grid.render(config['gridPanelDiv']);
			addtionalFunctionForDataStore(ds, grid);
			return grid;
		}
	}
}();